←
▼
▲
Function GetOldestDate() as Date
Data 型の最も過去の値を返します。
(src)
←
▼
▲
Function W3CDTF( SourceTimeDate as Date or string ) as string or Date
日時を文字列(W3C-DTF)に変換します。 または、その逆変換をします。
(src)
サンプル
→ T_Date.vbs # W3CDTF
テスト
W3CDTF( CDate( "2001/2/2 1:15" ) ) = "2001-02-02T01:15:00+09:00"
W3CDTF( "2001-02-02T01:15:00+09:00" ) = CDate( "2001/02/02 1:15:00" )
W3CDTF( "2001-02-02T00:00:00Z" ) = CDate( "2001/02/12 9:00" )
日本(UTC+9時間)の場合
0000
0000-00
0000-00-00
0000-00-00T00:00+00:00
0000-00-00T00:00:00+00:00
0000-00-00T00:00:00.0+00:00
YYYY-MM-DDThh:mm:ss.sTZD
YYYY-MM-DDThh:mm:ssTZD
YYYY-MM-DDThh:mmTZD
YYYY-MM-DD
YYYY-MM
YYYY
年月日時分秒が 1桁のときは 01 のように 0 をつけること。
年は4桁。小数部は何桁でもよい。
時刻(hh:mm:ss)は、現地の時刻を記述する。
XML などで国際的に使える日時の表記法。 タイムゾーンを考慮している。
ISO 8601:1988 に基づく。 XML Schema の dateTime 型より厳密で単純。
W3Cの標準仕様ではない。
は、"Z", "+00:00", "-00:00" のいずれか。
日時を引数に指定したら、文字列が返ります。
文字列を引数に指定したら、日時が返ります。
それ以外を指定したら、Empty が返ります。
W3C-DTF の文字列は、ファイル名に使うことができません。 : を ; に置き換えてください。
←
▼
▲
a_date = CDateFromEMailDate( "Date: Fri, 25 Oct 2013 22:07:30 +0900" )
Assert W3CDTF( a_date ) = "2013-10-25T22:07:30+09:00"
Function CDateFromEMailDate( DateString as string ) as Date
e-mail (MIME) 形式の日付を、VBScript の Date 型に変換します。
【引数】
DateString
返り値
e-mail (MIME) 形式の日付
日付
関連
サンプル
ソース
→ T_Date.vbs
テスト
T_EMailDate
→ MIME
→ vbslib.vbs
←
▼
▲
Function GetMonthNumberFromString( MonthStr as string ) as integer
3文字からなる月の英語表記を、月の数字に変換します。
【引数】
MonthStr
返り値
3文字からなる月の英語表記
月の数字
Assert GetMonthNumberFromString( "Jan" ) = 1
サンプル
ソース
→ T_Date.vbs
テスト
T_GetMonthNumberFromString
→ vbslib.vbs
←
▼
▲
Function ConvertTimeZone( DateTime as Date or string, FromTZD as string, ToTZD as string )
as Date or string
タイムゾーンを変更した時刻を返します。
【引数】
DateTime
FromTZD
変更前の時刻。 Date 型、または W3C-DTF 形式の文字列
変更前のタイムゾーン、または Empty
ToTZD
変更後のタイムゾーン、または Empty
(src)
変更後の時刻。 DateTime 引数と同じ型(Date型または文字列)
返り値
サンプル
ConvertTimeZone( "2002-02-02T11:02:02+09:00", "+09:00", "Z" ) = "2002-02-02T02:02:02Z"
ConvertTimeZone( CDate("2:02"), "Z", "+9:00" ) = CDate("11:02")
→ T_Date.vbs # ConvertTimeZone
テスト
DateTime に W3C-DTF を指定するときは、FromTZD は Empty または、DateTime に指定した
タイムゾーンと同じタイムゾーンを指定できます。
DateTime に Date 型を指定するときに、FromTZD を Empty にすると、現在 OS に設定されている
タイムゾーンを指定したことと同じになります。
ToTZD に Empty にすると、現在 OS に設定されているタイムゾーンを指定したことと同じになります。
←
▼
▲
Function TimeZoneDesignator( MinuteBias as integer ) as string
W3C-DTF のタイムゾーンの部分の文字列を返します。
【引数】
MinuteBias
時差。単位は分。 Empty = OS に設定されているタイムゾーン
W3C-DTF のタイムゾーンの部分
返り値
(src)
サンプル
TimeZoneDesignator( 540 ) = "+09:00"
TimeZoneDesignator( Empty ) = "+09:00" '// 日本の場合
→ T_Date.vbs # TimeZoneDesignator
テスト
←
▼
▲
Function MinusTZD( MinuteBias as integer ) as string
W3C-DTF のタイムゾーンの部分の文字列をマイナスにして返します。
【引数】
MinuteBias
時差。単位は分。 Empty = OS に設定されているタイムゾーン
W3C-DTF のタイムゾーンの部分のマイナス
返り値
サンプル
MinusTZD( 540 ) = "-09:00"
MinusTZD( Empty ) = "-09:00" '// 日本の場合
→ T_Date.vbs # MinusTZD
テスト
(src)
Minus Time Zone Disignator
←
▼
▲
Sub BenchStart()
全体の処理時間の計測を開始します。
ファイル:
vbslib.vbs
BenchStart
For Each x In Items
Bench 1
'// セクション1の計測区間
Bench 2
'// セクション2の計測区間
Bench 0
Next
BenchEnd
Pause
サンプル
Benchmark Result:
Sampling Count = 1401
Elapsed Time = 0.151(sec)
Max is Section 2
Section 1: 3times 0.032(sec)
Section 2: 3times 0.102(sec)
計測結果の表示例
テスト
→ T_Date.vbs # T_Bench
(src)
サンプル
Sub Main()
BenchStart
Bench 1
'// セクション1の計測区間
Bench 2
'// セクション2の計測区間
Bench 0
'// 計測対象外
BenchEnd '// 表示
Pause
End Sub
計測結果の表示例
Benchmark Result:
Sampling Count = 3
Elapsed Time = 0.022(sec)
Max is Section 1
Section 1: 1times 0.012(sec)
Section 2: 1times 0.010(sec)
参考
←
▼
▲
Sub Bench( SectionNum as integer )
セクション(全体の中の一部の区間)の処理時間の計測を開始します。
参考
【引数】
SectionNum
セクションの識別番号
計測するセクションの開始位置に、SectionNum に1以上の値を指定して、Bench を呼び出してください。
計測するセクションの終了位置に、SectionNum に0を指定して、Bench を呼び出してください。
計測するセクションの終了位置が、次のセクションの開始位置であるときは、SectionNum に0を指定
しなくても、次のセクションの識別番号を指定できます。
ファイル:
vbslib.vbs
(src)
←
▼
▲
参考
Sub BenchEnd()
全体の処理時間の計測を終了し、計測結果を表示します。
ファイル:
vbslib.vbs
(src)
←
▼
▲
テスト
→ T_Date.vbs
→ vbslib.vbs
ソース
Dim g_VBS_Lib.ProgressTimer as g_VBS_Lib_ProgressTimerClass
進捗状況を表示するオブジェクト。
サンプル
Set pr_timer = g_VBS_Lib.ProgressTimer
pr_timer.Interval_msec = 100
Do
If pr_timer.GetShouldShow() Then _
echo_v "7/20"
Loop
T_ProgressTimer
データ構造
表示の更新間隔(ミリ秒)。 小さすぎると遅くなります。
デフォルトは、1000 ミリ秒。
カウント値。 0以上 .MaxCount 以下。
カウント値の最大値。、
表示のフォーマット。 以下の変数を指定できます。
${Percent}
.Count × 100 ÷ .MaxCount
${Count}
${MaxCount}
${Text}
.Count の値
.MaxCount の値
Start、End_、Plus、Show メソッドの in_Text 引数
デフォルト: " ${Percent}% ${Count}/${MaxCount} ${Text}"
表示のタイミングだけ見る場合
Set pr_timer = g_VBS_Lib.ProgressTimer
pr_timer.Start Empty, 12, 100, ""
Do Until pr_timer.Count >= pr_timer.MaxCount
Sleep 50 '// Do Anything
pr_timer.Plus +1, Empty
Loop
pr_timer.End_ ""
12回のループの進捗を 100ミリ秒ごとに表示する場合
サンプル
グローバルに1つだけ存在します。
←
▼
▲
Sub g_VBS_Lib_ProgressTimerClass::Start( in_ShowFormat as string, _
in_MaxCount as integer, in_Interval_msec as integer, in_Text as string )
進捗状況を表示を開始します。
【引数】
in_ShowFormat
in_MaxCount
に設定する値
に設定する値
in_Interval_msec
に設定する値
in_Text
の ${Text} から置き換える文字列
in_Text に Empty を指定したときは、開始したすぐには表示をしません。
←
▼
▲
Sub g_VBS_Lib_ProgressTimerClass::End_( in_Text as string )
表示するタイミングではないときにカウント値が最大値になったときのために、表示します。
【引数】
in_Text
の ${Text} から置き換える文字列
〜 End_ は、ネストすることができます。
最も外側の
〜 End_ 以外は、何もしません。
in_Text に Empty を指定したときは、表示を更新しません。
←
▼
▲
Sub g_VBS_Lib_ProgressTimerClass::Plus( in_PlusCount as integer, in_Text as string )
進捗状況のカウント値をプラスして、表示するタイミングだったら、表示内容を変更します。
【引数】
in_PlusCount
in_Text
カウント値をプラスする値
の ${Text} から置き換える文字列
←
▼
▲
Function g_VBS_Lib_ProgressTimerClass::GetShouldShow() as boolean
表示するタイミングかどうかを返します。
←
▼
▲
メモ
Reset メソッドは廃止。 ネストできないため。
←
▼
▲
Function IsSame( Left, Right ) as boolean
= とほぼ同じですが、Empty, Null と "" を比較しても False を返します。
テスト
ソース
→ T_Arr.vbs
T_IsSame
→ vbslib.vbs
←
▼
▲
テスト
→ vbslib.vbs
ソース
→ T_Arr.vbs
T_AddArray
Function Add( Operand1 as type1, Operand2 as type1 ) as type1
加算します。
type1 は、以下の型を指定できます。
・ + 演算子が使える型(数値型、文字列型)
・配列型
←
▼
▲
Set vars = CreateObject( "Scripting.Dictionary" )
vars.Item( "a" ) = 2
Assert CalculateVariables( "a + 3", vars ) = 5
Function CalculateVariables( Formula as string, Variables as dictionary ) as variant
文字列で表現された計算式を計算します。
【引数】
Formula
Variables
計算式。 VBScript の文法で表現したもの
計算式で使える変数の集合
返り値
計算結果
ファイル:
vbslib.vbs
関連
テスト
"a + 3"
サンプル
(src)
計算式に、Variables 引数に指定した変数を使うことができます。
変数の値は、数値だけでなく、文字列やオブジェクトも指定できます。
→ T_Calc.vbs # [T_Calc]
変数の値が文字列型であっても、数値として計算します。
変数の値が他の変数の参照にすることもできます。
Set vars = CreateObject( "Scripting.Dictionary" )
vars.Item( "a" ) = 2
vars.Item( "b" ) = "3"
vars.Item( "c" ) = "b"
Assert CalculateVariables( "a + b + c", vars ) = 8
←
▼
▲
Set pos = new NestPos
'// pos.PosArr = Array( 0 )
pos.Start '// pos.PosArr = Array( 1, 0 )
pos.End_ '// pos.PosArr = Array( 1 )
pos.Start '// pos.PosArr = Array( 2, 0 )
pos.Start '// pos.PosArr = Array( 2, 1, 0 )
pos.End_ '// pos.PosArr = Array( 2, 1 )
pos.End_ '// pos.PosArr = Array( 2 )
処理順序におけるネスト(入れ子)の位置をカウント・アップします。
Dim NestPos::PosArr as Array of integer
.PosArr
.Start
Sub NestPos::Start()
.End_
Sub NestPos::End_()
現在のネストの位置。
配列番号は、ネストの深さに対応します。
ブロックの開始。
カウント・アップして、配列の要素を1つ増やします。
ブロックの終了。
配列の要素を1つ減らします。
(src)
←
▼
▲
オブジェクトかどうかによって、Out = In_ または Set Out = In_ をします。
静的オブジェクト (または演算器的なオブジェクト) を取得します。
スクリプトファイルをインクルードして、静的オブジェクトを取得します。
静的オブジェクト・スクリプトファイルをすべて取得して一覧できるようにします。
静的オブジェクト・スクリプトファイルをインクルードします。
単純な DefineInfo オブジェクトを生成します。
指定のインターフェースを持った、静的な一般名オブジェクトを取得します。
ストリームから、オブジェクトを1つ生成します。
ストリームから、オブジェクトをいくつか生成して、配列に格納します。
文字列で指定した名前のクラスのオブジェクトを生成します。
Name 変数と、Delegate 変数の対応関係を表すクラスです。
何もしないコールバック関数の本体。
相互参照しているオブジェクトのライフサイクルを管理します。
イベントが発生したらコールバックされる関数の集合。
←
▼
▲
Sub LetSet( Out as variant, In_ as variant )
In_ がオブジェクトかどうかによって、Out = In_ または Set Out = In_ をします。
If IsObject( In_ ) Then Set Out = In_ Else Out = In_
一般に、LetSet を呼び出すより、IsObject で判定(上記のコード)を記述した方が高速ですが、
In_ に関数や Dictionary::Item などの重い処理を記述するときは、その重い処理を
2度実行させないLetSet の方が高速です。
実装:
サンプル:
LetSet v, dic("name") '// Set "v"
→ T_Var.vbs
テスト
T_LetSet
ソース
→ vbs_inc_sub.vbs
関連
代入先が配列、または、辞書のとき
代入元が辞書のとき
←
▼
▲
Sub LetSetWithBracket( out_Collection as variant, in_Index as variant, in_Item as variant )
配列、または、辞書の要素に登録します。
LetSetWithBracket dic, "key", 1
→ T_Var.vbs
テスト
T_LetSet
ソース
→ vbs_inc_sub.vbs
配列、または、辞書に代入するときの
です。
関連
下記のどちらかのコードに相当します。
out_Collection( in_Index ) = in_Item
Set out_Collection( in_Index ) = in_Item
サンプル
【引数】
out_Collection
in_Index
(入出力) 配列 または 辞書、( ) で要素にアクセスできるコレクション
配列番号 または 辞書のキー
in_Item
配列 または 辞書に追加する値 (オブジェクト または 非オブジェクト)
←
▼
▲
Function get_Object( Name as string ) as Object
静的オブジェクト (または演算器的なオブジェクト) を取得します。
【引数】
Name
取得するオブジェクトのクラス名
返り値
オブジェクト
サンプル:
関連
Dim name : name = "ClassA"
Dim obj : Set obj = get_Object( name )
Dim g_ClassA
Function get_ClassA() '// has_interface_of ClassI
If IsEmpty( g_ClassA ) Then _
Set g_ClassA = new ClassA : ErrCheck
Set get_ClassA = g_ClassA
End Function
get_Object は、機能的には、"get_" + Name の関数を呼び出すだけなので、
別途関数を用意する必要があります。
たとえば、Name = "ClassA" なら、get_ClassA の関数が呼ばれます。
ClassI
ClassA
ClassA
ClassA
ClassA
ClassA
ClassA
ClassA
(src)
Name が変数ではないときは、直接 get_ClassA を呼び出すことができます。
Dim obj : Set obj = get_ClassA()
new でオブジェクトを生成すると、get_ClassA で取得できるオブジェクトと別の
インスタンスになります。
Name が動的に変わることがないときは、get_ClassA 関数を直接呼び出して
ください。
→ T_GetObject.vbs [T_IncludeObjs1]
テスト
静的オブジェクトが無ければ、エラーになります。
←
▼
▲
Function get_ObjectFromFile( ModulePath as string, Name as string ) as Object
スクリプトファイルをインクルードして、静的オブジェクトを取得します。
【引数】
ModulePath
Name
スクリプトファイルのパス
取得するオブジェクトのクラス名
返り値
取得したオブジェクト
Dim m : Set m = get_ObjectFromFile( "Lib\SampleLib.vbs", "Sample" )
サンプル: SampleLib.vbs ファイルで定義されている Sample オブジェクトを取得する。
上記サンプルは、下記と同じです。
include "Lib\SampleLib.vbs"
Dim m : Set m = get_Sample()
オブジェクトを取得する部分は、機能的には、"get_" + Name の関数を呼び出すだけなので、
スクリプトファイルの中で、別途関数を定義する必要があります。 参考
(src)
→ T_GetObject.vbs get_ObjectFromFile [T_NewModule]
テスト